/*
 * @lc app=leetcode.cn id=572 lang=cpp
 *
 * [27f.] 操作给定的二叉树将其变换为源二叉树的镜像
 *
 * 方法：交换左右子树
 */

// @lc code=start
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

struct TreeNode
{
  int val;
  TreeNode* left;
  TreeNode* right;
  TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
 public:
  void Mirror(TreeNode* pRoot)  // 给一个二叉树的根结点
  {
    if (nullptr == pRoot) return;  // 如果当前结点为空或者子结点均为空就返回，不进行后续操作

    if (nullptr == pRoot->left && nullptr == pRoot) return;
    // 遍历树，交换左右儿子
    swap(pRoot->left, pRoot->right);  // 如果当前结点有子结点就交换左右子结点

    if (pRoot->left) Mirror(pRoot->left);  // 如果左子树非空，则镜像化左子树

    if (pRoot->right) Mirror(pRoot->right);  // 如果右子树非空，则镜像化右子树
  }
};
// @lc code=end
